package com.visitor.visitor;

import java.util.ArrayList;
import java.util.List;

/**
 * 数据结构，将 被访问者 和访问者结合起来，实现调用
 * 这里其实就是把 元素 和 对于元素的操作 结合起来
 */
public class Home {

    //声明集合对象，存储元素（被访问者）
    private List<Animal> animals = new ArrayList<>();

    //添加元素
    public void add(Animal animal){
        animals.add(animal);
    }

    //操作 传入一个具体的访问者（操作）
    public void action(Person person){
        for (Animal animal : animals) {
            //让  被访问者（操作） 接受 访问者（元素）去操作自己
            //这里的accept（Person）的参数是一个泛型，执行的时候要去找到具体的实现类，即进行了一次分派。
            animal.accept(person);
        }
    }

}
